﻿Imports CapaLogica.CL.Usuario
Imports CapaLogica.CL.Carrera
Imports CapaLogica.CL.PeriodoLectivo

Public Class frmRegistrarModificarUsuario

    Dim tieneCarrera As Boolean
    Dim insertar As Boolean = True


    Private Sub tsbCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Me.Close()
    End Sub

    Private Sub tsbRefrescar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tsbRefrescar.Click
        limpiarForm()
    End Sub

    Private Function validarForm()
        Dim mensaje As String
        Dim result As Boolean
        result = True
        mensaje = ""


        If txt_cedula.Text.Length = 0 Then
            mensaje += "Debe de ingresar la cedula" + vbCrLf
            result = False
        End If

        If txtUsuarioNombre.Text.Length = 0 Then
            mensaje += "Debe de ingresar el nombre" + vbCrLf
            result = False
        End If

        If txtUsuarioAp1.Text.Length = 0 Then
            mensaje += "Debe de ingresar el primer apellido" + vbCrLf
            result = False
        End If

        If txtUsuarioAp2.Text.Length = 0 Then
            mensaje += "Debe de ingresar el segundo apellido" + vbCrLf
            result = False
        End If

       

        If cmbGenero.SelectedItem = Nothing Then
            mensaje += "Debe de seleccionar un genero" + vbCrLf
            result = False
        End If

        If dt_fecNaci.Text.Length = 0 Then
            mensaje += "Debe de ingresar la fecha de nacimiento" + vbCrLf
            result = False
        End If


        If cmbRol.SelectedIndex < 1 Then
            mensaje += "Debe de seleccionar un rol de usuario" + vbCrLf
            result = False
        End If

        If txtCorreo.Text.Length = 0 Then
            mensaje += "Debe de ingresar el correo" + vbCrLf
            result = False
        Else
            If Not (ValidaEMail(txtCorreo.Text)) Then
                mensaje += "Debe de ingresar un correo valido" + vbCrLf
                result = False
            End If
        End If

        If tieneCarrera Then
            If listaCarrerasAsig.Items.Count = 0 Then
                mensaje += "Debe de asociar al menos una carrera al usuario" + vbCrLf
                result = False
            End If
        End If

        If result = False Then
            MessageBox.Show(mensaje, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If



        Return result
    End Function

    Private Sub btn_regresar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Common.cambiarElementosDeListas(Me.listaCarrerasAsig, Me.listaCarreras)
    End Sub

    Private Sub btn_pasar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_pasar.Click
        Common.cambiarElementosDeListas(Me.listaCarreras, Me.listaCarrerasAsig)
    End Sub

    Public Sub cargarFormInsert()
        idUsuario.Text = "-1"
        limpiarForm()
        llenarComoBox(cmbRol, GestorUsuario.listarRoles(), "--Seleccione un rol--")
        cmbGenero.SelectedIndex = 0
    End Sub

    Private Sub HabilitarCarreras()
        Try


            If Not (cmbRol.SelectedIndex = -1 Or cmbRol.SelectedIndex = 0) Then


                Dim cod_rol As Integer = obtenerIdComboBox(cmbRol)


                setearLista(listaCarrerasAsig)
                setearLista(listaCarreras)

                If cod_rol = 1 Then
                    llenarLista(listaCarreras, GestorCarrera.listarTodasLasCarreras())
                    llenarLista(listaCarrerasAsig, GestorCarrera.listarCarrerasEstudianteUi(CInt(idUsuario.Text)))
                    gp_carreras.Enabled = True
                    eliminarElementosRepetidos(listaCarreras, listaCarrerasAsig)
                    tieneCarrera = True
                ElseIf cod_rol = 3 Then
                    llenarLista(listaCarreras, GestorCarrera.listarCarrerasSinDirector())
                    llenarLista(listaCarrerasAsig, GestorCarrera.listarCarrerasDirectorAcademico(CInt(idUsuario.Text)))
                    gp_carreras.Enabled = True
                    tieneCarrera = True

                Else
                    gp_carreras.Enabled = False
                    clearListas()
                    tieneCarrera = False
                End If

            End If

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Information, "Error")
        End Try


    End Sub

    Private Sub clearListas()
        listaCarreras.Items.Clear()
        listaCarrerasAsig.Items.Clear()
    End Sub

    Private Sub cmbRol_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbRol.SelectedIndexChanged
        HabilitarCarreras()
    End Sub

    Private Sub btn_regresar_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_regresar.Click
        Common.cambiarElementosDeListas(Me.listaCarrerasAsig, Me.listaCarreras)
    End Sub

    Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton1.Click
        Try
            If validarForm() Then
                Dim mensaje As String

                If ind_accion.Text = "IN" Then
                    mensaje = "¿Desea registrar la el usuario?"
                Else
                    mensaje = "¿Desea modificar los datos del usuario?"
                End If


                Dim button As DialogResult = MessageBox.Show(mensaje, "Usuario", MessageBoxButtons.YesNoCancel,
                                                             MessageBoxIcon.Warning)
                If button = DialogResult.Yes Then

                    If ind_accion.Text = "IN" Then
                        ''En caso de inserción
                        Try
                            If GestorUsuario.registrarUsuario(txt_cedula.Text, txtUsuarioNombre.Text, txtUsuarioAp1.Text, txtUsuarioAp2.Text, cmbGenero.Text, Convert.ToDateTime(dt_fecNaci.Text), obtenerIdComboBox(cmbRol), txtCorreo.Text, obtenerIdsDeListBox(listaCarrerasAsig)) Then
                                MessageBox.Show("¡Se registro el usuario satisfactoriamente!", "Usuario Registrado", MessageBoxButtons.OK, MessageBoxIcon.Information)
                                limpiarForm()
                                cmbRol.SelectedIndex = 0
                            End If
                        Catch ex As Exception
                            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                        End Try

                    Else
                        If (GestorUsuario.actualizarUsuario(CType(idUsuario.Text, Int32), txt_cedula.Text, txtUsuarioNombre.Text, txtUsuarioAp1.Text, txtUsuarioAp2.Text, cmbGenero.Text, Convert.ToDateTime(dt_fecNaci.Text), obtenerIdComboBox(cmbRol), txtCorreo.Text, obtenerIdsDeListBox(listaCarrerasAsig))) Then
                            MessageBox.Show("¡Se modifico el usuario satisfactoriamente!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information)
                            limpiarForm()
                            Me.Dispose()
                        Else
                            MessageBox.Show("No se modifico el usuario satisfactoriamente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                        End If

                    End If


                Else
                    If ind_accion.Text = "IN" Then
                        MsgBox("¡El usuario no se ha registrado!", MsgBoxStyle.Information, "Usuario")
                    Else
                        MsgBox("¡El usuario no se ha modificado!", MsgBoxStyle.Information, "Usuario")
                    End If

                End If
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Information, "Error")
        End Try


    End Sub


    Private Function ValidaEMail(ByVal EMail As String) As Boolean

        If Not EMail.Contains("@") Then
            Return False
        End If

        Dim SeccionesEMail As String() = EMail.Split(CChar("@"))

        If SeccionesEMail.Length <> 2 Then
            Return False
        End If

        If Not SeccionesEMail(1).Contains(".") Or Not SeccionesEMail(1).Length >= 3 Then
            Return False
        End If

        Return True

    End Function

    Private Sub limpiarForm()
        txt_cedula.Text = ""
        txtUsuarioNombre.Text = ""
        txtUsuarioAp1.Text = ""
        txtUsuarioAp2.Text = ""
        txtCorreo.Text = ""
        gp_carreras.Enabled = False
        clearListas()
        cmbGenero.SelectedIndex = 0

    End Sub

    Private Sub frmRegistrarModificarUsuario_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        idUsuario.Visible = False
        ind_accion.Visible = False
        habilitarRol()
    End Sub

    Private Sub habilitarRol()
        Try
            GestorPeriodoLectivo.validarQuePeriodoLectivoEstaCerrado("")
        Catch ex As Exception
            If ind_accion.Text <> "IN" Then
                cmbRol.Enabled = False
            End If

        End Try
    End Sub

    Private Sub ToolStripButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton2.Click
        Me.Dispose()
    End Sub
End Class